unimport
Unified utils for auto importing APIs in modules
Features
- Auto import registed APIs for Vite, Webpack or esbuild powered by unplugin
- TypeScript declaration file generation
- Auto import for custom APIs defined under specific directories
- Auto import for Vue template
Install
npm install unimport
yarn add unimport
pnpm install unimport
Usage
Plugin Usage
Powered by unplugin, unimport
provides a plugin interface for bundlers.
Vite / Rollup
import Unimport from 'unimport/unplugin'
export default {
plugins: [
Unimport.vite({ })
]
}
Webpack
import Unimport from 'unimport/unplugin'
module.exports = {
plugins: [
Unimport.webpack({ })
]
}
Programmatic Usage
import { createUnimport } from 'unimport'
const { createUnimport } = require('unimport')
const { injectImports } = createUnimport({
imports: [{ name: 'fooBar', from: 'test-id' }]
})
console.log(injectImports('console.log(fooBar())'))
Configurations
Imports Item
Named import
imports: [
{ name: 'ref', from: 'vue' },
{ name: 'useState', as: 'useSignal', from: 'react' },
]
Will be injected as:
import { ref } from 'vue'
import { useState as useSignal } from 'react'
Default import
imports: [
{ name: 'default', as: '_', from: 'lodash' }
]
Will be injected as:
import _ from 'lodash'
Custom Presets
Presets are provides as a shorthand for declaring imports from the same package:
presets: [
{
from: 'vue',
imports: [
'ref',
'reactive',
]
}
]
Will be equivalent as:
imports: [
{ name: 'ref', from: 'vue' },
{ name: 'reactive', from: 'vue' },
]
Built-in Presets
unimport
also provides some builtin presets for common libraries:
presets: [
'vue',
'pinia',
'vue-i18n',
]
You can check out src/presets
for all the options avaliable or refer to the type declration.
Exports Auto Scan
Since unimport
v0.7.0, we also support auto scanning the examples from a local installed package, for example:
presets: [
{
package: 'h3',
ignore: ['isStream', /^[A-Z]/, /^[a-z]*$/, r => r.length > 8]
}
]
This will be expanded into:
imports: [
{
"from": "h3",
"name": "appendHeader",
},
{
"from": "h3",
"name": "appendHeaders",
},
{
"from": "h3",
"name": "appendResponseHeader",
},
]
The ignore
option is used to filter out the exports, it can be a string, regex or a function that returns a boolean.
By default, the result is strongly cached by the version of the package. You can disable this by setting cache: false
.
Type Declarations
Unimport.vite({
dts: true
})
Directory Auto Import
{
dirs: [
'./composables/*'
]
}
Named exports for modules under ./composables/*
will be registered for auto imports.
Vue Template Auto Import
In Vue's template, usage of APIs are in different context than plain modules. Thus some custom transformation are required. To enable it, set addons.vueTemplate
to true
:
Unimport.vite({
addons: {
vueTemplate: true
}
})
Caveats
When auto-import a ref, inline operations won't be auto unwrapped.
export const counter = ref(0)
<template>
<div>{{ counter }}</div>
<div>{{ counter + 1 }}</div>
<div>{{ counter.value + 1 }}</div>
</template>
We recommend using Volar for type checking, which will help you to identify the misusage.
💻 Development
- Clone this repository
- Enable Corepack using
corepack enable
(use npm i -g corepack
for Node.js < 16.10) - Install dependencies using
pnpm install
- Run interactive tests using
pnpm dev
License
Made with 💛
Published under MIT License.